package com.yww.leetcode.stack;

import com.yww.datastructure.stack.ArrayStack;

/**
 * @author yww
 * @description 20. 有效的括号
 * @since 2024/2/5 9:43
 */
public class IsValid20 {
    // 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
    public boolean isValid(String s) {
        ArrayStack<Character> stack = new ArrayStack<>(s.length());
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            switch (c) {
                case '(': {
                    // 把右括号压入栈
                    stack.push(')');
                    break;
                }
                case '[': {
                    // 把右括号压入栈
                    stack.push(']');
                    break;
                }
                case '{': {
                    // 把右括号压入栈
                    stack.push('}');
                    break;
                }
                default: {
                    // 遍历到右括号，弹出栈顶括号，如果不相等返回false
                    if (stack.isEmpty() || stack.pop() != c) {
                        return false;
                    }
                }
            }
        }
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        boolean valid = new IsValid20().isValid("]");
    }
}
